package com.shujia.wyh.day20;

import java.util.Arrays;
import java.util.List;

/*
       可变参数概述：定义方法的时候不知道该定义多少个参数
       根据案例我们发现，每当参数增加，就需要新增一个方法，因为参数列表的不一致导致找不到方法
       但是，这样写。我们很麻烦。
       所以java替我们考虑到了这一个问题，提供了一个技术给我们使用：可变参数
       格式
            修饰符 返回值类型 方法名(数据类型…  变量名){}

       注意事项：
        1、如果将来传参的参数类型不一致，却想要做一样的操作，可变参数就用不了了，为什么？
             数组只能存放同一种数据类型的元素。
        2、将来传参的时候，传一个字符串，和若干个int类型的数值，输出这个字符串和若干个int类型的值的和
            定义的时候，需要将可变参数放到最后一个定义


       Arrays工具类中的一个方法
        public static <T> List<T> asList(T... a)返回由指定数组支持的固定大小的列表。





 */
public class ArgsDemo {
    public static void main(String[] args) {
//        ArgsDemo argsDemo = new ArgsDemo();
//        argsDemo.sum();
        //求两个数之和
        int a = 10;
        int b = 20;
        sum(a, b);

        //求三个数之和
        int c = 30;
        sum(a, b, c);

        //求四个数之和
        int d = 40;
        sum(a, b, c, d);

//        show(1, 2, 3, 4, 5,"String");
        show("java", 1, 2, 3, 4, 5);

        show2(10001,98,99,100);

        //底层其实是将我们的可变参数的数组转成一个ArrayList集合
        List<String> strings = Arrays.asList("java", "hadoop", "hive", "bigdata");

    }

    public static void show2(int id, int... ints) {
        int sum = 0;
        for (int i : ints) {
            sum += i;
        }
        System.out.println("学号：" + id + ",总成绩：" + sum);
    }


    public static void show(String s, int... ints) {
        int sum = 0;
        for (int i : ints) {
            sum += i;
        }

        System.out.println(s + "可变参数之和为：" + sum);
    }

//    public static void show(String s, int... ints) {
//        int sum = 0;
//        for (int i : ints) {
//            sum += i;
//        }
//
//        System.out.println(s + "可变参数之和为：" + sum);
//    }

    //我想求int数值的和
    //这里的ints其实就是一个数组的名字（将来传进来的int类型的数值组成一个int类型的一维数组）
    public static void sum(int... ints) {
//        System.out.println(ints);
        int sum = 0;
        for (int i = 0; i < ints.length; i++) {
            sum += ints[i];
        }
        System.out.println(sum);

    }

//    public static void sum(int a, int b) {
//        System.out.println(a + b);
//    }
//
//    public static void sum(int a, int b, int c) {
//        System.out.println(a + b + c);
//    }
//
//    public static void sum(int a, int b, int c, int d) {
//        System.out.println(a + b + c + d);
//    }

}
